/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package presentacion;

import Auxiliares.Contantes;
import java.util.Vector;
import javax.swing.JOptionPane;
import negocio.Cliente;
import Auxiliares.FuncionesComunes;
import Auxiliares.Cache;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import negocio.ControladorClientes;
/**
 *
 * @author Esteban
 */
public class PanelBusquedaUsuario extends javax.swing.JPanel implements Contantes{

    private static PanelBusquedaUsuario _Instancia;
    public PanelPrincipal _PanelPrincipal;
    public PanelPedidos _PanelPedidos;
    public ControladorClientes _ControladorClientes;
    public Cache _Cache;
    
    private ActionListener listener = new ActionListener() {  
        public void actionPerformed(ActionEvent evt) {
            buscarCliente(txtBuscar.getText());
        }  
    };
    
    private PanelBusquedaUsuario() {
        initComponents();    
        FuncionesComunes.MostrarOcultarLbl(this, false, jLabel3, jLabel7, jLabel4, jLabel5, jLabel6, jLabel2,jLabel8);
        FuncionesComunes.MostrarOcultarTxt(this, false);
        deshabilitarBotones();
        txtBuscar.addActionListener(listener);
    }
    
    public static PanelBusquedaUsuario getInstancia(){
        if (_Instancia == null)
            _Instancia = new PanelBusquedaUsuario();
        return _Instancia;
    }
    
    public void deshabilitarBotones(){
        this.btnAgregar.setEnabled(false);
        this.btnCuenta.setEnabled(false);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        txtBuscar = new javax.swing.JTextField();
        btnBuscar = new javax.swing.JButton();
        btnLimpiar = new javax.swing.JButton();
        jLabel2 = new javax.swing.JLabel();
        lblEmail = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        lblNombre = new javax.swing.JLabel();
        lblDireccion = new javax.swing.JLabel();
        lblTelefono = new javax.swing.JLabel();
        btnCuenta = new javax.swing.JButton();
        btnCancelar = new javax.swing.JButton();
        txtDireccion = new javax.swing.JTextField();
        txtTelefono = new javax.swing.JTextField();
        txtEmail = new javax.swing.JTextField();
        txtNombre = new javax.swing.JTextField();
        btnAgregar = new javax.swing.JButton();
        jLabel7 = new javax.swing.JLabel();
        lblApellidos = new javax.swing.JLabel();
        txtApellidos = new javax.swing.JTextField();
        jLabel8 = new javax.swing.JLabel();

        setMaximumSize(new java.awt.Dimension(900, 700));
        setMinimumSize(new java.awt.Dimension(900, 700));
        addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentShown(java.awt.event.ComponentEvent evt) {
                formComponentShown(evt);
            }
        });
        setLayout(null);

        jPanel1.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 2, true));
        jPanel1.setMaximumSize(new java.awt.Dimension(500, 400));
        jPanel1.setMinimumSize(new java.awt.Dimension(500, 400));
        jPanel1.setPreferredSize(new java.awt.Dimension(500, 400));
        jPanel1.setLayout(null);

        jLabel1.setFont(new java.awt.Font("Andalus", 0, 24)); // NOI18N
        jLabel1.setForeground(new java.awt.Color(255, 255, 255));
        jLabel1.setText("Telefono de usuario: (Ejemplo 88776543 sin guiones)");
        jPanel1.add(jLabel1);
        jLabel1.setBounds(12, 13, 540, 38);
        jPanel1.add(txtBuscar);
        txtBuscar.setBounds(12, 70, 223, 39);

        btnBuscar.setText("Buscar");
        btnBuscar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnBuscarActionPerformed(evt);
            }
        });
        jPanel1.add(btnBuscar);
        btnBuscar.setBounds(270, 70, 119, 39);

        btnLimpiar.setText("Limpiar");
        btnLimpiar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnLimpiarActionPerformed(evt);
            }
        });
        jPanel1.add(btnLimpiar);
        btnLimpiar.setBounds(420, 70, 119, 39);

        jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/fondoPanel.jpg"))); // NOI18N
        jLabel2.setText("jLabel2");
        jLabel2.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 2, true));
        jLabel2.setName("jLabel2");
        jPanel1.add(jLabel2);
        jLabel2.setBounds(0, 0, 560, 140);

        add(jPanel1);
        jPanel1.setBounds(30, 90, 560, 140);

        lblEmail.setFont(new java.awt.Font("Andalus", 1, 18)); // NOI18N
        lblEmail.setForeground(new java.awt.Color(255, 255, 255));
        lblEmail.setText("elizondo1288@hotmail.com");
        lblEmail.setName("lblEmail");
        add(lblEmail);
        lblEmail.setBounds(180, 570, 560, 28);

        jLabel3.setFont(new java.awt.Font("Andalus", 1, 18)); // NOI18N
        jLabel3.setForeground(new java.awt.Color(255, 255, 255));
        jLabel3.setText("Nombre    :");
        jLabel3.setName("jLabel3");
        add(jLabel3);
        jLabel3.setBounds(50, 330, 180, 28);

        jLabel4.setFont(new java.awt.Font("Andalus", 1, 18)); // NOI18N
        jLabel4.setForeground(new java.awt.Color(255, 255, 255));
        jLabel4.setText("Dirección :");
        jLabel4.setName("jLabel4");
        add(jLabel4);
        jLabel4.setBounds(50, 450, 180, 28);

        jLabel5.setFont(new java.awt.Font("Andalus", 1, 18)); // NOI18N
        jLabel5.setForeground(new java.awt.Color(255, 255, 255));
        jLabel5.setText("Telefono  :");
        jLabel5.setName("jLabel5");
        add(jLabel5);
        jLabel5.setBounds(50, 510, 180, 28);

        jLabel6.setFont(new java.awt.Font("Andalus", 1, 18)); // NOI18N
        jLabel6.setForeground(new java.awt.Color(255, 255, 255));
        jLabel6.setText("Email        :");
        jLabel6.setName("jLabel7");
        add(jLabel6);
        jLabel6.setBounds(50, 570, 180, 28);

        lblNombre.setFont(new java.awt.Font("Andalus", 1, 18)); // NOI18N
        lblNombre.setForeground(new java.awt.Color(255, 255, 255));
        lblNombre.setText("Fulano Apellido Segundo");
        lblNombre.setName("lblNombre");
        add(lblNombre);
        lblNombre.setBounds(180, 330, 560, 28);

        lblDireccion.setFont(new java.awt.Font("Andalus", 1, 18)); // NOI18N
        lblDireccion.setForeground(new java.awt.Color(255, 255, 255));
        lblDireccion.setText("Barrio el carmen de paso ancho de la urbanizacion sin nombre 200 metros hacia el este y ");
        lblDireccion.setAutoscrolls(true);
        lblDireccion.setName("lblDireccion");
        add(lblDireccion);
        lblDireccion.setBounds(180, 450, 560, 30);

        lblTelefono.setFont(new java.awt.Font("Andalus", 1, 18)); // NOI18N
        lblTelefono.setForeground(new java.awt.Color(255, 255, 255));
        lblTelefono.setText("88641981");
        lblTelefono.setName("lblTelefono");
        add(lblTelefono);
        lblTelefono.setBounds(180, 510, 560, 28);

        btnCuenta.setFont(new java.awt.Font("Andalus", 0, 24)); // NOI18N
        btnCuenta.setForeground(new java.awt.Color(153, 0, 0));
        btnCuenta.setText("Anotar Pedido");
        btnCuenta.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCuentaActionPerformed(evt);
            }
        });
        add(btnCuenta);
        btnCuenta.setBounds(650, 190, 220, 50);

        btnCancelar.setFont(new java.awt.Font("Andalus", 0, 24)); // NOI18N
        btnCancelar.setForeground(new java.awt.Color(153, 0, 0));
        btnCancelar.setText("Cancelar");
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });
        add(btnCancelar);
        btnCancelar.setBounds(650, 290, 220, 50);

        txtDireccion.setName("txtDireccion");
        add(txtDireccion);
        txtDireccion.setBounds(180, 450, 400, 30);

        txtTelefono.setName("txtTelefono");
        add(txtTelefono);
        txtTelefono.setBounds(180, 510, 400, 30);

        txtEmail.setName("txtEmail");
        txtEmail.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtEmailActionPerformed(evt);
            }
        });
        add(txtEmail);
        txtEmail.setBounds(180, 570, 400, 30);

        txtNombre.setName("txtNombre");
        add(txtNombre);
        txtNombre.setBounds(180, 330, 400, 30);

        btnAgregar.setFont(new java.awt.Font("Andalus", 0, 24)); // NOI18N
        btnAgregar.setForeground(new java.awt.Color(153, 0, 0));
        btnAgregar.setText("Guarda Usuario");
        btnAgregar.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                btnAgregarMouseClicked(evt);
            }
        });
        btnAgregar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAgregarActionPerformed(evt);
            }
        });
        add(btnAgregar);
        btnAgregar.setBounds(650, 90, 220, 50);

        jLabel7.setFont(new java.awt.Font("Andalus", 1, 18)); // NOI18N
        jLabel7.setForeground(new java.awt.Color(255, 255, 255));
        jLabel7.setText("Apellidos  :");
        jLabel7.setName("jLabel7");
        add(jLabel7);
        jLabel7.setBounds(50, 390, 180, 28);

        lblApellidos.setFont(new java.awt.Font("Andalus", 1, 18)); // NOI18N
        lblApellidos.setForeground(new java.awt.Color(255, 255, 255));
        lblApellidos.setText("Fulano Apellido Segundo");
        lblApellidos.setName("lblApellidos");
        add(lblApellidos);
        lblApellidos.setBounds(180, 390, 560, 20);

        txtApellidos.setName("txtApellidos");
        add(txtApellidos);
        txtApellidos.setBounds(180, 390, 400, 30);

        jLabel8.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/fondoNuevaOrden.png"))); // NOI18N
        jLabel8.setName("jLabel8");
        add(jLabel8);
        jLabel8.setBounds(0, 0, 900, 700);
    }// </editor-fold>//GEN-END:initComponents

    private void btnBuscarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBuscarActionPerformed
        buscarCliente(this.txtBuscar.getText());
    }//GEN-LAST:event_btnBuscarActionPerformed

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed
        deshabilitarBotones();
        FuncionesComunes.MostrarOcultarTxt(this, false);
        FuncionesComunes.MostrarOcultarLbl(this, false, jLabel3, jLabel7, jLabel4, jLabel5, jLabel6,jLabel8);
        _PanelPrincipal = PanelPrincipal.getInstancia();
        this.setVisible(false);
        _PanelPrincipal.setVisible(true);
        
    }//GEN-LAST:event_btnCancelarActionPerformed

    private void btnLimpiarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnLimpiarActionPerformed
        limpiar();
    }//GEN-LAST:event_btnLimpiarActionPerformed

    private void btnAgregarMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_btnAgregarMouseClicked
        FuncionesComunes.LimpiarTextBox(this);
    }//GEN-LAST:event_btnAgregarMouseClicked

    private void formComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentShown
        // TODO add your handling code here:
    }//GEN-LAST:event_formComponentShown

    private void btnAgregarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAgregarActionPerformed
        insertarCliente();
    }//GEN-LAST:event_btnAgregarActionPerformed

    private void txtEmailActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtEmailActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_txtEmailActionPerformed

    private void btnCuentaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCuentaActionPerformed
        // TODO add your handling code here:
        _PanelPedidos = PanelPedidos.getInstancia();
        this.setVisible(false);
        _PanelPedidos.lblCliente.setText("Cliente: "+lblNombre.getText()+' '+lblApellidos.getText());
        _PanelPedidos.setVisible(true);
    }//GEN-LAST:event_btnCuentaActionPerformed

    
    //el metodo nos permite agregar nuevos clientes al sistema.
    private void insertarCliente(){
       String nombre = this.txtNombre.getText();
       String apellidos = this.txtApellidos.getText();
       String telefono = this.txtTelefono.getText();
       String email = this.txtEmail.getText();
       String dire = this.txtDireccion.getText();
        
        _ControladorClientes = ControladorClientes.getInstancia();
        boolean resul =_ControladorClientes.guardarCliente(nombre, apellidos, telefono, dire, email);
        if(resul){
            limpiar();
            buscarCliente(telefono);
            
        }else{
           JOptionPane.showMessageDialog(null, MENSAJE_ERROR_INSERTAR, TITULO_ERROR_INSERTAR, JOptionPane.ERROR_MESSAGE); 
        } 
    }
    
    
    //metodo que nos permite ir a la base de datos por un cliente en especifico
    private void buscarCliente(String numero){
        //si se encontro en la base de datos el numero de telefono entonces
        //mostramos los labels con el texto, en caso contrario los textos.
        
        
        if(!numero.isEmpty() && (FuncionesComunes.EsNumericoXCantidadDigitos(numero, 8))){
            _ControladorClientes = ControladorClientes.getInstancia();
            Vector<Cliente> respuesta = _ControladorClientes.buscarClienteXTelefono(numero);
       
            if(respuesta.size() == 0){
                FuncionesComunes.MostrarOcultarTxt(this, true);
                FuncionesComunes.MostrarOcultarLbl(this, false, jLabel3, jLabel7, jLabel4, jLabel5, jLabel6,jLabel8);
                this.btnAgregar.setEnabled(true);
                this.btnCuenta.setEnabled(false);
            
                JOptionPane.showMessageDialog(null, MENSAJE_NOENCONTRO, TITULO_NOENCONTRO, JOptionPane.QUESTION_MESSAGE);
                this.txtTelefono.setText(numero);
                this.txtTelefono.setEnabled(false);
            }
            else{
                FuncionesComunes.MostrarOcultarLbl(this, true);
                FuncionesComunes.MostrarOcultarTxt(this, false);
                this.btnAgregar.setEnabled(false);
                this.btnCuenta.setEnabled(true);
            
                Cliente cli = respuesta.firstElement();
            
                this.lblNombre.setText(cli.getNombre());
                this.lblApellidos.setText(cli.getApellidos());
                this.lblTelefono.setText(cli.getTelefono());
                this.lblEmail.setText(cli.getCorreo());
                this.lblDireccion.setText(cli.getDireccion());
                
                //Guardamos el id y el nombre en cache
                _Cache = Cache.getInstancia();
                _Cache.setIdClienteActual(cli.getIdCliente());
                _Cache.setNombreClienteActual(cli.getNombre() + " " + cli.getApellidos());
    
            }
        }else{
            if(numero.isEmpty()){
                JOptionPane.showMessageDialog(null, MENSAJE_VACIO, TITULO_VACIO, JOptionPane.ERROR_MESSAGE);
            }else
                JOptionPane.showMessageDialog(null, MENSAJE_CAMPO_BUSCAR_ERRONEO, TITULO_ERRONEO, JOptionPane.ERROR_MESSAGE);
        }
    }
    
    //metodo que se encarga de limpiar los campos y ocultar los elementos de interfaz necesarios.
    private void limpiar(){
        deshabilitarBotones();
        FuncionesComunes.MostrarOcultarTxt(this, false);
        FuncionesComunes.MostrarOcultarLbl(this, false, jLabel3, jLabel7, jLabel4, jLabel5, jLabel6,jLabel8);
    }
    
    
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAgregar;
    private javax.swing.JButton btnBuscar;
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnCuenta;
    private javax.swing.JButton btnLimpiar;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JLabel lblApellidos;
    private javax.swing.JLabel lblDireccion;
    private javax.swing.JLabel lblEmail;
    private javax.swing.JLabel lblNombre;
    private javax.swing.JLabel lblTelefono;
    private javax.swing.JTextField txtApellidos;
    private javax.swing.JTextField txtBuscar;
    private javax.swing.JTextField txtDireccion;
    private javax.swing.JTextField txtEmail;
    private javax.swing.JTextField txtNombre;
    private javax.swing.JTextField txtTelefono;
    // End of variables declaration//GEN-END:variables

}
